package br.ufpe.cin.ip.biblioteca.gui;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import br.ufpe.cin.ip.biblioteca.entidades.Funcionario;
import br.ufpe.cin.ip.biblioteca.excecoes.ArquivoConfiguracaoNaoEncontradoException;
import br.ufpe.cin.ip.biblioteca.excecoes.FuncionarioNaoEncontradoException;
import br.ufpe.cin.ip.biblioteca.excecoes.LoginSenhaIncorretosException;
import br.ufpe.cin.ip.biblioteca.excecoes.RepositorioException;
import br.ufpe.cin.ip.biblioteca.negocio.Fachada;

public class Login extends JFrame {
	private static final long serialVersionUID = -5989324782139377227L;
	private Fachada fachada;
	private final JTextField caixaLogin;
	private final JPasswordField caixaSenha;
	
	public Login() {
		super();
		
		try {
			this.fachada = Fachada.getInstancia();
		} catch(ArquivoConfiguracaoNaoEncontradoException e) {
			this.fachada = null;
			JOptionPane.showMessageDialog(null, e.getMessage());
			System.exit(0);
		}
		
		this.getContentPane().setLayout(null);
		
		JLabel labelLogin = new JLabel("Login:");
		labelLogin.setBounds(30, 30, 50, 20);
		this.getContentPane().add(labelLogin);
		
		JLabel labelSenha = new JLabel("Senha:");
		labelSenha.setBounds(30, 70, 50, 20);
		this.getContentPane().add(labelSenha);
		
		this.caixaLogin = new JTextField();
		this.caixaLogin.setBounds(80, 30, 280, 20);
		this.getContentPane().add(this.caixaLogin);
		
		this.caixaSenha = new JPasswordField();
		this.caixaSenha.setBounds(80, 70, 280, 20);
		this.getContentPane().add(this.caixaSenha);
		
		JButton botaoLogin = new JButton("Efetuar Login");
		botaoLogin.setBounds(130, 130, 110, 25);
		botaoLogin.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				Funcionario funcionario = new Funcionario(Login.this.caixaLogin.getText(), new String(Login.this.caixaSenha.getPassword()));
				
				try {
					if(Login.this.fachada.login(funcionario)) {
						Login.this.dispose();
						new HomeScreen().setVisible(true);
					} else {
						JOptionPane.showMessageDialog(Login.this, new LoginSenhaIncorretosException().getMessage(), "Erro", JOptionPane.ERROR_MESSAGE);
					}
				} catch(RepositorioException e1) {
					JOptionPane.showMessageDialog(Login.this, e1.getMessage(), "Erro", JOptionPane.ERROR_MESSAGE);
				} catch(FuncionarioNaoEncontradoException e1) {
					JOptionPane.showMessageDialog(Login.this, e1.getMessage(), "Erro", JOptionPane.WARNING_MESSAGE);
				} catch(LoginSenhaIncorretosException e1) {
					JOptionPane.showMessageDialog(Login.this, e1.getMessage(), "Erro", JOptionPane.WARNING_MESSAGE);
				}
			}
		});
		this.getContentPane().add(botaoLogin);
		
		JButton botaoCadastrar = new JButton("Cadastrar Novo");
		botaoCadastrar.setBounds(240, 130, 120, 25);
		botaoCadastrar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				new CadastrarFuncionarioLogin(Login.this).setVisible(true);
			}
		});
		this.getContentPane().add(botaoCadastrar);
		
		this.setTitle("Login - SysBiblio");
		this.setBounds(100, 100, 415, 220);
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}
